package com.liuwei.spring.cloud.junit.leetcode.dp;

import com.liuwei.spring.cloud.common.utils.Jackson;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Slf4j
public class Pizza {

    /**
     * “吃货”和“馋嘴”两人到披萨店点了一份铁盘（圆形）披萨，并嘱咐店员将披萨按放射状切成大小相同的偶数扇形小块。但是粗心服务员将披萨切成了每块大小都完全不同奇数块，且肉眼能分辨出大小。
     * 由于两人都想吃到最多的披萨，他们商量了一个他们认为公平的分法：从“吃货”开始，轮流取披萨。除了第一块披萨可以任意选取以外，其他都必须从缺口开始选。
     * 他俩选披萨的思路不同。“馋嘴”每次都会选最大块的披萨，而且“吃货”知道“馋嘴”的想法。
     * 已知披萨小块的数量以及每块的大小，求“吃货”能分得的最大的披萨大小的总和。
     * @param args
     */

    public static void main(String[] args) {
        List<Integer> values = Arrays.asList(5,8,2,10,5,7);
        int max = 0;
        for (int i = 0; i < values.size(); i++) {
            List<Integer> right = values.subList(i,values.size());
            List<Integer> left = values.subList(0,i);

            List<Integer> remains = new ArrayList<>();
            right.forEach(x->{
                remains.add(x);
            });
            left.forEach(x->{
                remains.add(x);
            });
            int total = getMore(remains,true);
            log.info("i:{} total:{}",i,total);
            if(total>max){
                max = total;
            }
        }
        log.info("max:{}",max);
    }

    public static int getMore(List<Integer> queueBeginWithChiHuo, boolean start){
        if(queueBeginWithChiHuo==null || queueBeginWithChiHuo.size()==0){
            return 0;
        }
        if(queueBeginWithChiHuo.size()==1){
            return queueBeginWithChiHuo.get(0);
        }
        log.info("queue:{}", Jackson.toJSONString(queueBeginWithChiHuo));
        Integer removed = null;
        if(start){
            removed = queueBeginWithChiHuo.removeFirst();
        }else{
            removed = queueBeginWithChiHuo.removeLast();
        }
        log.info("queue:{}", Jackson.toJSONString(queueBeginWithChiHuo));
        Integer first = queueBeginWithChiHuo.getFirst();
        Integer last = queueBeginWithChiHuo.getLast();
        if(first>=last){
            queueBeginWithChiHuo.removeFirst();
        }else{
            queueBeginWithChiHuo.removeLast();
        }
        log.info("queue:{}", Jackson.toJSONString(queueBeginWithChiHuo));
        List<Integer> remain1 = new ArrayList<>();
        List<Integer> remain2 = new ArrayList<>();
        queueBeginWithChiHuo.forEach(x->{
            remain1.add(x);
            remain2.add(x);
        });
        int x = getMore(remain1,true);
        int y = getMore(remain2,false);
        log.info("start max:{} end max:{}",x,y);
        return removed + Math.max(x,y);
    }
}
